package licode.unisop.platform.client.api;


import licode.unisop.platform.client.info.PlatformAuthInfo;
import licode.unisop.platform.client.info.PlatformHeartInfo;
import licode.unisop.platform.client.vo.PlatAuthVO;
import licode.unisop.provider.info.SiLookupAssetIn;
import licode.unisop.provider.info.SiPlatIdFind;
import licode.unisop.provider.info.SiPlatformId;
import licode.unisop.provider.vo.SiAsset;
import licode.unisop.provider.vo.SiAssetInfo;
import licode.unisop.provider.vo.SiPlatform;

import java.util.List;

/**
 * 定义平台认证相关的接口
 *
 * @author licode
 */
public interface SiPlatformAuthService {
    /**
     * 更新平台缓存
     * @param platId 平台ID
     */
    void updateCache(SiPlatformId platId);

    /**
     * 验证平台（各个平台登录时调用）
     * @param info 平台认证的信息
     * @return 返回临时生成的平台Token
     */
    PlatAuthVO register(PlatformAuthInfo info);

    /**
     * 通过平台标识查询平台信息
     * @param idInfo 平台标识
     * @return 平台信息
     */
    PlatAuthVO fromId(SiPlatIdFind idInfo);

    /**
     * 获取认证的平台信息
     * @param idInfo 平台标识
     * @return 平台信息
     */
    SiPlatform getAuthPlatform(SiPlatIdFind idInfo);

    /**
     * 查找并检查平台
     * @param idInfo 平台标识
     * @return 平台信息
     */
    SiPlatform getPlatformAndCheck(SiPlatIdFind idInfo);

    SiAssetInfo getPlatformAssets(SiPlatIdFind idInfo);

    /**
     * 获取平台指定资源信息
     *
     * @param lookupIn 查询条件
     * @return 平台资源信息
     */
    List<SiAsset> lookPlatformAsset(SiLookupAssetIn lookupIn);

    /**
     * 获取当前已经认证的平台数
     * @return 认证的平台数
     */
    long getAuthCount();

    /**
     * 对指定的平台进行禁用
     * @param idInfo 平台ID
     */
    void forbid(SiPlatformId idInfo);

    /**
     * 对认证的平台进行续期
     * @param info 平台信息
     * @return 成功返回OK
     */
    String renew(PlatformHeartInfo info);
}
